package com.fouram.agent;

import com.fouram.agent.enums.AgentTypeEnums;
import com.fouram.agent.handle.AgentHandleTransformer;
import com.fouram.agent.handle.ExecuteHandleUtils;
import com.fouram.agent.time.AgentTimeTransformer;
import com.fouram.agent.time.ExecuteTimeUtils;
import com.fouram.agent.util.AgentUtils;
import com.fouram.agent.util.ConfigConsts;
import com.fouram.agent.util.ConfigUtils;

import java.lang.instrument.Instrumentation;

/**
 * Agent核心类
 * 
 * @author fouram
 */
public class Agent {
    public static void premain(String args, Instrumentation inst) {
        ConfigUtils.initProperties(args);
        String agentType = ConfigUtils.getProperty(ConfigConsts.AGENT_TYPE);
        if(AgentUtils.isBlank(agentType)){
            agentType = AgentTypeEnums.TIME.name();
        }
        // 性能日志
        if(AgentTypeEnums.TIME.name().equals(agentType)){
            ExecuteTimeUtils.init();
            inst.addTransformer(new AgentTimeTransformer());
        }
        // 句柄日志
        if(AgentTypeEnums.HANDLE.name().equals(agentType)){
            ExecuteHandleUtils.init();
            inst.addTransformer(new AgentHandleTransformer());
        }
    }
}
